package com.example.origin.demo.suanfa.leecode;

/**
 * 输入: 1->2->3->4->5->NULL
 * 输出: 5->4->3->2->1->NULL
 */
public class No206ReverseLinkedList {
    public static void main(String[] args) {
        ListNode listNode = new ListNode(1);
        ListNode next = new ListNode(2);
        listNode.next = next;
        ListNode next1 = new ListNode(3);
        next.next = next1;
        ListNode next2 = new ListNode(4);
        next1.next = next2;
        ListNode next3 = new ListNode(5);
        next2.next = next3;
        ListNode node = reverseList(listNode);
        while (node!=null){
            System.out.println(node.val);
            node= node.next;
        }
    }


    public static class ListNode {
        int val;
        ListNode next;
        ListNode(int x) { val = x; }
    }
//    public static ListNode reverseList(ListNode head) {
//        ListNode prev = null; // 前一个节点初始化为null
//        ListNode curr = head; // 当前节点初始化为头节点
//
//        while (curr != null) {
//            ListNode nextTemp = curr.next; // 保存当前节点的下一个节点
//            curr.next = prev; // 反转当前节点的指向，使其指向前一个节点
//            prev = curr; // 前移前一个节点指针，指向当前节点
//            curr = nextTemp; // 前移当前节点指针，指向原下一个节点
//        }
//
//        return prev; // 反转后新的头节点是原链表的尾节点，即prev
//    }

    public static ListNode reverseList(ListNode head) {
        ListNode prev = null;
        ListNode curr = head;
        while (curr!=null){
            ListNode next = curr.next;
            curr.next = prev;
            prev = curr;
            curr = next;
        }

        return prev;
    }

}

